class Person{
    public String name;
    public int age;
    public static String classroom = "录播课";//静态的成员变量不属于对象



    public Person(){//构造方法
       /* this.name = "zhangsan";
        this.age = 19;
        System.out.println("Person()");*/
        this("zhangsan",9);//调用了其他的构造方法，且只能在构造方法里使用
       /* 在构造方法里调用其他构造方法时，此行代码只能写在第一行
        调用哪个构造方法主要看小括号内（因为如果有其他构造方法也只是名字相同（方法的重载））
        this();不能自己调用自己*/
    }
    public Person(String name,int age){//方法的重载，方法名相同，参数列表不同
        this.name = name;
        this.age = age;
        System.out.println("=========");
    }
    public static void fuc(){
        System.out.println("静态方法");
        //System.out.println(this.name+"xxxxx");//静态方法不依赖于对象，而this是对象的引用，所以会报错
    }
    /*public Person(){//如果自己没有写构造方法，java会自己提供一个不带参数的构造方法（只有当一个构造方法也没有时）

    }*/
    public void show(){
        System.out.println("name:"+name+" age:"+age);
    }
    /**
     * 静态代码块
     * 1.先执行静态代码块 2.再执行构造代码块 3.再执行构造方法 4.静态代码块只执行一次
     */

    static {
        classroom = "bit";
        System.out.println("这个是静态代码块");
    }
    {
        System.out.println("这个是构造代码块/实例代码块");//只有再创建对象时才会执行
    }

    @Override
    public String toString() {//重写
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}



public class Test {
    public static void main(String[] args) {
      //  System.out.println(Person.classroom);
        Person person1 = new Person("zhangsan",18);
        System.out.println(person1);
    }
    public static void main2(String[] args) {
        Person person1 = new Person("zhangsan",18);
        Person person2 = new Person("lisi",9);
        Person person3 = new Person("wangwu",10);
        System.out.println(Person.classroom);
        System.out.println(Person.classroom);
        System.out.println(Person.classroom);//和对象无关，静态成员变量不依赖对象
        Person.fuc();

    }
    public static void main1(String[] args) {
        //int a;
       // System.out.println(a);//使用局部变量时一定要初始化
        Person person = new Person();//用new调用了Person（），所以可以打印
        person.show();
        System.out.println("------------");
        Person person1 = new Person("sunwukong",10);//person1是一个对象，调用的方法是属于这个对象的
        person1.show();
    }
}
